package com.yix.admin.modules.system.service;

import com.yix.admin.modules.system.entity.SysMenu;
import com.yix.admin.modules.system.entity.dto.SysMenuDto;
import com.yix.admin.modules.system.entity.dto.SysRoleSmallDto;
import com.yix.admin.modules.system.entity.query.SysMenuQuery;

import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * @author wdx
 * @version 1.0
 * @Description TODO
 * @date 2021/1/27 16:44
 */
public interface SysMenuService {
    /**
     * 构建菜单树
     * @param menuDtos 原始数据
     * @return /
     */
    List<SysMenuDto> buildTree(List<SysMenuDto> menuDtos);

    /**
     * 构建菜单树
     * @param menuDtos /
     * @return /
     */
    Object buildMenus(List<SysMenuDto> menuDtos);
    /**
     * 查询全部数据
     * @param criteria 条件
     * @return /
     */
    List<SysMenuDto> queryAll(SysMenuQuery criteria);
    /**
     * 查询全部数据
     * @param criteria 条件
     * @param isQuery /
     * @throws Exception /
     * @return /
     */
    List<SysMenuDto> queryAll(SysMenuQuery criteria, Boolean isQuery) throws Exception;
    /**
     * 根据当前用户获取菜单
     * @param currentUserId /
     * @return /
     */
    List<SysMenuDto> findByUser(String currentUserId);

    /**
     * 根据ID查询
     * @param id /
     * @return /
     */
    SysMenuDto findById(String id);

    /**
     * 根据ID获取同级与上级数据
     * @param menuDto /
     * @param objects /
     * @return /
     */
    List<SysMenuDto> getSuperior(SysMenuDto menuDto, List<SysMenu> objects);

    /**
     * 懒加载菜单数据
     * @param pid /
     * @return /
     */
    List<SysMenuDto> getMenus(String pid);

    /**
     * 创建
     * @param resources /
     */
    void create(SysMenu resources);

    /**
     * 编辑
     * @param resources /
     */
    void update(SysMenu resources);

    /**
     * 根据ID查询
     * @param id /
     * @return /
     */
    SysMenu findOne(String id);

    /**
     * 获取所有子节点，包含自身ID
     * @param menuList /
     * @param menuSet /
     * @return /
     */
    Set<SysMenu> getChildMenus(List<SysMenu> menuList, Set<SysMenu> menuSet);

    /**
     * 删除
     * @param menuSet /
     */
    void delete(Set<SysMenu> menuSet);
}
